#include <Eigen/Dense>
#include <pybind11/pybind11.h>
#include <pybind11/eigen.h>

namespace py = pybind11;

// 定义函数:使用Eigen求解线性方程组 KU = b
Eigen::VectorXd solve_linear_system(const Eigen::MatrixXd& K, const Eigen::VectorXd& b) {
    Eigen::VectorXd U = K.fullPivLu().solve(b);  // 使用全主元LU分解(稳定但稍慢)
    // 或者用更快的求解器(如共轭梯度法,适合对称正定矩阵):
    // Eigen::VectorXd U = K.ldlt().solve(b);
    return U;
}

// 绑定到Python模块
PYBIND11_MODULE(eigen_solver, m) {
    m.def("solve_linear_system", &solve_linear_system, "Solve KU = b using Eigen");
}